home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Info-Mac 4
/
Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso
/
Development
/
Source
/
MSG Demo 1.4.source Folder
/
Demo ƒ
/
Wipes ƒ
/
Mr. Do outdone.c
< prev
next >
Wrap
Text File
|
1994-04-19
|
4KB
|
170 lines
/**********************************************************************\
File: Mr. Do outdone.c
Purpose: Graphic effect from offscreen bitmap to main window (on
screen). See comments below for more description.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program in a file named "GNU General Public License".
If not, write to the Free Software Foundation, 675 Mass Ave,
Cambridge, MA 02139, USA.
\**********************************************************************/
#include "timing.h"
#define BoxSize 2
#define CorrectTime 3
#define theWindowHeight (boundsRect.bottom-boundsRect.top)
#define theWindowWidth (boundsRect.right-boundsRect.left)
pascal short MrDoOutdone(GrafPtr sourceGrafPtr, GrafPtr destGrafPtr, Rect boundsRect);
/* 25 regions on screen, in a 5 x 5 grid. Regions alternate as to whether they
scroll up or down. */
pascal short MrDoOutdone(GrafPtr sourceGrafPtr, GrafPtr destGrafPtr, Rect boundsRect)
{
int x, y;
int vgap,hgap;
Rect theRect, dest;
Rect bounds[25];
vgap=theWindowHeight/5;
hgap=theWindowWidth/5;
for (x=0; x<25; x++)
{
switch (x)
{
case 0:
case 1:
case 2:
case 3:
case 4:
bounds[x].top=0;
break;
case 15:
case 16:
case 17:
case 18:
case 5:
bounds[x].top=vgap;
break;
case 14:
case 23:
case 24:
case 19:
case 6:
bounds[x].top=vgap*2;
break;
case 13:
case 22:
case 21:
case 20:
case 7:
bounds[x].top=vgap*3;
break;
case 12:
case 11:
case 10:
case 9:
case 8:
bounds[x].top=vgap*4;
break;
}
switch (x)
{
case 0:
case 15:
case 14:
case 13:
case 12:
bounds[x].left=0;
break;
case 1:
case 16:
case 23:
case 22:
case 11:
bounds[x].left=hgap;
break;
case 2:
case 17:
case 24:
case 21:
case 10:
bounds[x].left=hgap*2;
break;
case 3:
case 18:
case 19:
case 20:
case 9:
bounds[x].left=hgap*3;
break;
case 4:
case 5:
case 6:
case 7:
case 8:
bounds[x].left=hgap*4;
break;
}
bounds[x].bottom=bounds[x].top+vgap;
bounds[x].right=bounds[x].left+hgap;
OffsetRect(&(bounds[x]), boundsRect.left, boundsRect.top);
}
for (x=BoxSize; x<vgap; x+=BoxSize)
{
StartTiming();
for (y=0; y<25; y++)
{
if (y%2) /* these scroll up */
{
dest=bounds[y];
dest.top=dest.bottom-BoxSize;
theRect=bounds[y];
theRect.top+=x-BoxSize;
theRect.bottom=theRect.top+BoxSize;
ScrollTheRect(&bounds[y], 0, -BoxSize, 0L);
CopyBits(&(sourceGrafPtr->portBits), &(destGrafPtr->portBits),
&theRect, &dest, 0, 0L);
}
else /* these scroll down */
{
dest=bounds[y];
dest.bottom=dest.top+BoxSize;
theRect=bounds[y];
theRect.bottom-=x-BoxSize;
theRect.top=theRect.bottom-BoxSize;
ScrollTheRect(&bounds[y], 0, BoxSize, 0L);
CopyBits(&(sourceGrafPtr->portBits), &(destGrafPtr->portBits),
&theRect, &dest, 0, 0L);
}
}
TimeCorrection(CorrectTime);
}
CopyBits(&(sourceGrafPtr->portBits), &(destGrafPtr->portBits),
&boundsRect, &boundsRect, 0, 0L); /* in case we missed any */
return 0;
}